#!/usr/bin/perl
# Juan Manuel Mouriz <jmouriz@slowsoft.com.ar>
# Toma como entrada un archivo .glade y lo corrige para que se pueda usar con GtkBuilder.
use strict;
use warnings;

my $input = (shift or die "Especifique el nombre del archivo a tratar\n");
my $output = (shift or die "Especifique también el nombre del archivo que desea generar\n");
my $pattern = '(-?[0-9]+\.?[0-9]{0,2})[0-9]*';
my @content;
my @adjustments;
my $text = 0;
my $textview = 0;
my $id = 1;

# Process input

open INTPUT, $input or die "$!\n";

while (<INTPUT>) {
  next if /<property name="response_id">[0-9]+<\/property>/;

  next if /<requires lib="gtk\+" version="[^"]+"\/>/;

  $textview = 1 if /<object class="GtkTextView" id="[^"]+">/;

  if ($textview) {
    if (/<property name="text" translatable="yes">/) {
      $text = 1 if not /<\/property>/;
      next;
    }

    $text = 0 if $text and /<\/property>/;

    next if $text;
  }

  $textview = 0 if /<\/object>/;

  s/<(\/?)glade-interface>/<$1interface>/;

  s/_item// if /<child type="label_item">/;

  if (s/(<property name="adjustment">)$pattern $pattern $pattern $pattern $pattern $pattern(<\/property>)/$1adjustment$id$8/) {

    push @adjustments, <<EOF;
  <object class="GtkAdjustment" id="adjustment$id">
    <property name="lower">$3</property>
    <property name="upper">$4</property>
    <property name="step-increment">$5</property>
    <property name="page-increment">$6</property>
    <property name="page-size">$7</property>
    <property name="value">$2</property>
  </object>
EOF

    $id++;
  }

  push @content, $_;
}

close INTPUT;

# Save output

open OUTPUT, "> $output" or die "$!\n";

foreach (@content) {
  print OUTPUT;
  map { print OUTPUT } @adjustments if /<interface>/;
}

close OUTPUT;
